package cn.exrick.xboot.common.utils;

public class DistanceUtil {

    // 地球平均半径（单位：公里）
    private static final double EARTH_RADIUS = 6371.0;

    /**
     * 计算两个经纬度坐标之间的距离（Haversine公式）
     * @param lat1 第一个点的纬度
     * @param lon1 第一个点的经度
     * @param lat2 第二个点的纬度
     * @param lon2 第二个点的经度
     * @return 距离（单位：公里）
     */
    public static double calculateDistance(String lat1, String lon1, String lat2, String lon2) {
        // 将经纬度转换为弧度
        double lat1Rad = Math.toRadians(Double.parseDouble(lat1));
        double lon1Rad = Math.toRadians(Double.parseDouble(lon1));
        double lat2Rad = Math.toRadians(Double.parseDouble(lat2));
        double lon2Rad = Math.toRadians(Double.parseDouble(lon2));

        // 计算纬度差和经度差
        double dLat = lat2Rad - lat1Rad;
        double dLon = lon2Rad - lon1Rad;

        // Haversine公式
        double a = Math.pow(Math.sin(dLat / 2), 2) +
                Math.cos(lat1Rad) * Math.cos(lat2Rad) * Math.pow(Math.sin(dLon / 2), 2);
        double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));

        // 计算距离
        return EARTH_RADIUS * c;
    }
}
